#include "widget.h"
#include "ui_widget.h"

#include <QPushButton>
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    // new出来的变量，生命周期跟随整个窗口（挂到对象树上，窗口关闭才释放）
    // 类似this指向的对象widget
    QPushButton* button = new QPushButton(this);
    button->setText("按钮");
    button->move(200, 200);

    // lambda表达式是一个回调函数
    // 无法直接获取上层作用域中的变量
    // 为了解决此问题，引入了变量捕获语法
    // 获取到外层作用域中的变量
    // 如果需要的很多可以使用“[=]”,意思为捕获上层所有变量
    // 如果自己创建对象，lambda捕获，注意对象生命周期管理
    // lambda除了可以按照值的方式捕获变量[=],还可以按照引用的方式捕获
    // Qt中很少用到
    // 如果Qt4或者更老的版本需要手动在.pro文件中加上C++ 11的编译选项
    connect(button, &QPushButton::clicked, this, [button, this](){
        qDebug() << "lambda被执行了！";
        button->move(300, 300);
        this->move(100, 100);
    });
}

Widget::~Widget()
{
    delete ui;
}

